const SkipCaptcha = require('./common/utils');
const path = require('path');

async function testCaptchaWithAlertHandling() {
    console.log('开始测试验证码识别和弹窗处理...');
    
    const skipCaptcha = new SkipCaptcha();
    const searchUrl = 'https://www.kanyikanys.cc/index.php?m=vod-search'; // 替换为实际的搜索URL
    const keyword = '速度与激情'; // 替换为实际的搜索关键词
    
    try {
        console.log('尝试自动处理验证码...');
        const content = await skipCaptcha.autoHandleCaptcha(searchUrl, keyword);
        
        if (content) {
            console.log('搜索成功，获取到内容');
            // 可以在这里处理搜索结果
            return;
        } else {
            console.log('未获取到内容，尝试手动处理验证码流程');
        }
        
        // 手动处理验证码流程
        await manualCaptchaHandling(skipCaptcha, searchUrl, keyword);
        
    } catch (error) {
        console.error('测试过程中出错:', error);
        
        // 尝试手动处理验证码作为备选方案
        try {
            console.log('尝试手动处理验证码作为备选方案...');
            await manualCaptchaHandling(skipCaptcha, searchUrl, keyword);
        } catch (manualError) {
            console.error('手动处理验证码也失败了:', manualError);
        }
    }
}

/**
 * 手动处理验证码流程
 * @param {SkipCaptcha} skipCaptcha 验证码处理实例
 * @param {string} searchUrl 搜索URL
 * @param {string} keyword 搜索关键词
 */
async function manualCaptchaHandling(skipCaptcha, searchUrl, keyword) {
    // 尝试手动处理验证码
    console.log('尝试手动获取验证码图片...');
    
    let maxAttempts = 5;  // 最大尝试次数
    let currentAttempt = 0;
    let success = false;
    
    while (currentAttempt < maxAttempts && !success) {
        currentAttempt++;
        console.log(`第 ${currentAttempt}/${maxAttempts} 次尝试获取验证码...`);
        
        try {
            // 获取验证码图片
            let { captchaBase64, page } = await skipCaptcha.getCaptchaImage(searchUrl);
            
            if (!captchaBase64) {
                console.log('获取验证码图片失败，重试...');
                continue;
            }
            
            console.log('成功获取验证码图片');
            
            // 识别验证码
            let captchaCode = await skipCaptcha.recognizeCaptcha(captchaBase64);
            
            if (!captchaCode) {
                console.log('验证码识别失败，重试...');
                
                // 关闭当前页面，重新获取
                if (skipCaptcha.browser) {
                    await skipCaptcha.browser.close();
                    skipCaptcha.browser = null;
                }
                continue;
            }
            
            console.log(`验证码识别结果: ${captchaCode}`);
            
            // 提交验证码
            let maxRetries = 3;
            let currentRetry = 0;
            let result;
            
            do {
                console.log(`第 ${currentRetry + 1}/${maxRetries} 次尝试提交验证码...`);
                result = await skipCaptcha.submitCaptcha(page, keyword, captchaCode);
                
                if (result.error) {
                    console.log('验证码输入错误，需要重新获取验证码');
                    
                    // 获取新的验证码图片
                    try {
                        const { captchaBase64: newCaptchaBase64, page: newPage } = await skipCaptcha.getCaptchaImage(searchUrl);
                        
                        if (newCaptchaBase64) {
                            // 识别新的验证码
                            const newCaptchaCode = await skipCaptcha.recognizeCaptcha(newCaptchaBase64);
                            
                            if (newCaptchaCode) {
                                console.log(`新验证码识别结果: ${newCaptchaCode}`);
                                page = newPage;
                                captchaCode = newCaptchaCode;
                            } else {
                                console.log('新验证码识别失败');
                                break;
                            }
                        } else {
                            console.log('获取新验证码图片失败');
                            break;
                        }
                    } catch (refreshError) {
                        console.error('刷新验证码时出错:', refreshError);
                        break;
                    }
                } else {
                    console.log('验证码提交成功');
                    success = true;
                    break;
                }
                
                currentRetry++;
            } while (result.error && currentRetry < maxRetries);
            
            if (success) {
                console.log('搜索成功，获取到内容');
                // 处理搜索结果
                break;
            } else if (currentRetry >= maxRetries) {
                console.log('多次尝试后仍未成功提交验证码');
            }
            
        } catch (error) {
            console.error(`第 ${currentAttempt} 次尝试失败:`, error);
            
            // 确保浏览器实例被关闭
            if (skipCaptcha.browser) {
                try {
                    await skipCaptcha.browser.close();
                    skipCaptcha.browser = null;
                } catch (closeError) {
                    console.error('关闭浏览器时出错:', closeError);
                }
            }
        }
    }
    
    if (!success) {
        console.log(`已尝试 ${maxAttempts} 次，但未能成功处理验证码`);
    }
}

// 执行测试
testCaptchaWithAlertHandling().catch(error => {
    console.error('测试执行失败:', error);
    process.exit(1);
}); 